#ifndef COMMON_H_
#define COMMON_H_

#define _CAS(a,b,c) __sync_val_compare_and_swap(a,b,c)
#define _FAA(a,b) __sync_fetch_and_add(a,b)

#define LOG_EXP(a) cout<<"LOG_EXP: "<<#a<<" "<<a<<endl
#define LOG_MSG(a) cout << "LOG_MSG: " << a << endl

#include<assert.h>
#include<iostream>
#include<algorithm>

using std::cout;
using std::endl;
using std::max;
using std::min;

//typedef unsigned int uint;
/*
Mcached
treadpool.h
mempool.h
hashmap.h

*/

void trdpool_init(int trd_num);
int trdpool_addwork(void (*workfunc)(void *), void *arg);

void mempool_init();
void *mempool_malloc(int size);
void mempool_free(void *p);

void hashmap_init();
int hashmap_del(char *key, int keylen);
int hashmap_set(char *key, int keylen, char *val, int vallen);
int hashmap_get(char *key, int keylen, char *val);
//KV的发送存储都是C字符串，我觉得没必要再要在中间添加string了
//由于其中的字符串转换，都使用的是char=char，没有出现类型转换，可以理解为bit拷贝
//对于del set 0/-1表示成功失败 get返回的是数组长度
//但是我设计的异步任务，都是输入一个指针不返回的情况

#endif